home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / elan / turtle / sierpin.eln < prev    next >
Text File  |  1988-10-13  |  2KB  |  92 lines

  1.  
  2. TYPE POINT = STRUCT (REAL x, y);
  3.  
  4. PROC show point (POINT CONST p):
  5.   move (p.x, p.y);
  6.   plot pixel
  7. ENDPROC show point;
  8.  
  9. POINT PROC mid (POINT CONST a, b):
  10.   POINT: [a.x + (b.x - a.x) / 2.0, a.y + (b.y - a.y) / 2.0]
  11. ENDPROC mid;
  12.  
  13. PROC line parameters (POINT CONST a1, a2, REAL VAR m, c):
  14.   m := (a1.y - a2.y) / (a1.x - a2.x);
  15.   c := a1.y - m * a1.x
  16. ENDPROC line parameters;
  17.  
  18. BOOL PROC inside triangle (POINT CONST a, b, c, x):
  19.   crosspoint on the side (x, a, b, c) AND crosspoint on the side (x, b, c, a) AND crosspoint on the side (x, c, a, b)
  20. ENDPROC inside triangle;
  21.  
  22. BOOL PROC crosspoint on the side (POINT CONST p, pc, oc1, oc2):
  23.   POINT VAR cross;
  24.   IF crossing (p, pc, oc1, oc2, cross)
  25.   THEN between (cross.x, oc1.x, oc2.x) AND between (cross.y, oc1.y, oc2.y)
  26.   ELSE FALSE
  27.   FI
  28. ENDPROC crosspoint on the side;
  29.  
  30. BOOL PROC crossing (POINT CONST a1, a2, b1, b2, POINT VAR crp):
  31.   REAL VAR ma, ca, mb, cb;
  32.   line parameters (a1, a2, ma, ca);
  33.   line parameters (b1, b2, mb, cb);
  34.   IF ma = mb
  35.   THEN FALSE
  36.   ELSE
  37.     crp.x := (ca - cb) / (mb - ma);
  38.     crp.y := mb * crp.x + cb;
  39.     TRUE
  40.   FI
  41. ENDPROC crossing;
  42.  
  43. BOOL PROC between (REAL CONST x, a, b):
  44.   IF a <= b
  45.   THEN a <= x AND x <= b
  46.   ELSE b <= x AND x <= a
  47.   FI
  48. ENDPROC between;
  49.  
  50. program:
  51.   POINT VAR a, b, c, x;
  52.   INT VAR i;
  53.   LET iterations = 2000;
  54.   enter turtle graphics;
  55.   print title;
  56.   make triangle;
  57.   choose point;
  58.   FOR i UPTO iterations
  59.   REP
  60.     x := mid (choose random corner, x);
  61.     IF i > 30
  62.     THEN show point (x)
  63.     FI
  64.   ENDREP;
  65.   wait for confirmation (1, graphics y limit - line height);
  66.   leave turtle graphics.
  67.  
  68.   print title:
  69.     move (1, 1);
  70.     put ("Sierpienski triangle");
  71.     line;
  72.     put ("made by a random process").
  73.   
  74.   make triangle:
  75.     a := POINT: [0.0, 0.0];
  76.     b := POINT: [100.0, 0.0];
  77.     c := POINT: [80.0, 100.0].
  78.   
  79.   choose point:
  80.     REP x := POINT: [100.0 * random, 100.0 * random]
  81.     UNTIL inside triangle (a, b, c, x)
  82.     ENDREP.
  83.   
  84.   choose random corner:
  85.     SELECT random (1, 3) OF
  86.       CASE 1: a
  87.       CASE 2: b
  88.       OTHERWISE c
  89.     ENDSELECT.
  90.   
  91. 
  92.